Data compression techniques are known in which a digital audio or similar signal is divided in the time domain into blocks, each block is transformed using an orthogonal transform, and the resulting spectral coefficients are divided into plural bands of plural spectral coefficients. Block floating is applied to each band of the resulting spectral coefficients and each band of spectral coefficients is quantized. Information concerning the block floating and the information concerning quantization is transmitted or recorded on a recording medium simultaneously with the quantized data.
Block floating is a normalization process applied to a block of data comprising plural words, such as a band of plural spectral coefficients. Block floating is applied by multiplying each word in the data block by a common value for the data block to improve quantization efficiency. In a typical block floating process, the maximum absolute value of the words in the data block is found and is used as a block floating coefficient common to all the words in the data block. Using the maximum absolute value in the band as the block floating coefficient prevents data overflow because the absolute value of no other word in the data block can be greater than the maximum absolute value. A simplified form of block floating determines the block floating coefficient using a shift quantity, which provides block floating in 6 dB steps.
The orthogonal transform is normally carried out using a word length that is selected to be long enough so that a required accuracy can be achieved for any input data without using block floating. If the orthogonal transform is to be carried out without lowering the accuracy of the input data, a large word length is required. This results in increased hardware complexity and increased cost.
It is also known to improve analysis accuracy of the orthogonal transform by performing the orthogonal transform on the input signal divided into blocks having a variable block size. The block size is selected depending on the dynamic properties of the input signal. In some instances, the mean square value of the difference between adjacent samples of the input signal is used as a judgment index for determining the block size. The need to determine the judgment index exclusively for deciding on the block size for the orthogonal transform increases the number of processing steps.
In addition, when block floating is applied using the maximum absolute value of the words in the data block as the block floating coefficient, the absolute value of each word in the block is determined. Then, a sequence of determining whether the absolute value of the current word is greater than the maximum absolute value of the words already examined is repeated for all of the words in the data block. This results in an increased number of steps of the operating program and prolonged operating time.
FIG. 1 shows a flow chart of a conventional block floating program that applies block floating to a data block composed of plural words, for example, a band of spectral coefficients. Referring to FIG. 1, the absolute value of the current word is calculated at step S1. At the next step S2, the absolute value of the current word is compared to the maximum absolute value of the words in the data block already examined. If the maximum value of the current word is larger than the maximum absolute value, the current word is exchanged with the maximum absolute value at step S3, and becomes the new maximum absolute value, and the program proceeds to step S4. Otherwise, the program proceeds directly to step S4. Step S4 determines whether all of the words in the block have been processed. If the result is NO, the program reverts to step S1 and, if the result is YES, the program proceeds to the normalizing processing of step S5 onwards.
At step S5, the maximum absolute value for the block is shifted by one bit to the left. The most significant bit of the shifted word is tested at step S6. If the most significant bit is not a 1, the program reverts to step S5. The left shift process is repeated until the most significant bit of the shifted word is determined to be a 1 at step S6. The number of shifts immediately preceding the detection of a 1 is stored as the shift quantity, which can serve as the block floating coefficient. At the next step S7, each word in the block is normalized by shifting it to the left by the stored shift quantity. Step S8 checks whether all of the words in the data block have been normalized. If the result is NO, the program reverts to step S7 and, if the result is YES, the program terminates.
In the process just described, it is necessary to compare, for each word in the data block, the absolute value of the word with maximum absolute value of the words in the data block already examined. This requires a large number of the program steps and long processing time.